//go:build windows
// +build windows

package utils

import (
	"os"
	"path"
	"syscall"
)

// WriteToFile 将内容写入文件。
func WriteToFile(content []byte, filePath string, hide bool) (err error) {
	var file *os.File
	_, err = os.Stat(filePath)
	if os.IsNotExist(err) {
		err = os.MkdirAll(path.Dir(filePath), os.ModePerm)
		if err != nil {
			return
		}
		file, err = os.Create(filePath)
		if err != nil {
			return
		}
	} else {
		file, err = os.OpenFile(filePath, os.O_APPEND|os.O_WRONLY, os.ModeAppend)
		if err != nil {
			return
		}
	}
	// 将内容写入文件
	_, err = file.Write(content)
	file.Close()
	if hide {
		// 获取文件句柄
		var h syscall.Handle
		h, err = syscall.CreateFile(syscall.StringToUTF16Ptr(filePath),
			syscall.GENERIC_READ|syscall.GENERIC_WRITE,
			0,
			nil,
			syscall.OPEN_EXISTING,
			syscall.FILE_ATTRIBUTE_NORMAL,
			0)
		if err != nil {
			return
		}
		defer syscall.CloseHandle(h)
		// 设置文件属性为隐藏
		err = syscall.SetFileAttributes(syscall.StringToUTF16Ptr(filePath),
			syscall.FILE_ATTRIBUTE_HIDDEN)
		if err != nil {
			return
		}
	}
	return
}
